/**
 * calc.js 计算器脚本
 * 
 * 功能：
 * 1. 获取命令行参数，命令行参数为一个数学表达式
 * 2. 如果没有命令行参数，打印程序的使用说明
 * 3. 如果命令行参数是 --help 或者 -h，打印程序的使用说明
 * 4. 如果命令行参数多于 3 个，多余的参数忽略
 * 5. 对命令行参数的表达式进行求值，打印求值结果
 * 6. 如果命令行参数不是合法的数学表达式，则打印错误信息
 */

console.log('=== calc.js 计算器脚本 ===\n');

// 获取命令行参数
const args = process.argv.slice(2);

// 打印使用说明的函数
function printUsage() {
    console.log('使用方法：');
    console.log('  node 5.js <数学表达式>');
    console.log('  node 5.js --help 或 -h');
    console.log('');
    console.log('示例：');
    console.log('  node 5.js "2 + 3"');
    console.log('  node 5.js "10 * 5"');
    console.log('  node 5.js "(1 + 2) * 3"');
    console.log('  node 5.js "Math.sqrt(16)"');
    console.log('  node 5.js "Math.PI * 2"');
    console.log('');
    console.log('支持的运算符：');
    console.log('  + (加法), - (减法), * (乘法), / (除法)');
    console.log('  % (取余), ** (幂运算)');
    console.log('  Math 对象的所有方法');
    console.log('');
    console.log('注意：');
    console.log('  - 表达式需要用引号包围');
    console.log('  - 支持括号改变运算优先级');
    console.log('  - 支持 Math 对象的数学函数');
}

// 检查是否是帮助参数
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
    printUsage();
    process.exit(0);
}

// 如果参数多于3个，忽略多余的参数
if (args.length > 3) {
    console.log('警告：参数过多，只使用前3个参数');
    args.splice(3);
}

// 合并所有参数为一个表达式
const expression = args.join(' ');

console.log('输入的表达式：', expression);
console.log('');

try {
    // 验证表达式是否只包含安全的数学字符
    const safePattern = /^[0-9+\-*/().\s,Math\s\w]*$/;
    
    if (!safePattern.test(expression)) {
        throw new Error('表达式包含不安全的字符');
    }
    
    // 使用 eval 计算表达式（注意：在生产环境中应该使用更安全的解析器）
    const result = eval(expression);
    
    // 检查结果是否为有效数字
    if (typeof result === 'number' && !isNaN(result)) {
        console.log('计算结果：', result);
        
        // 如果是整数，也显示整数形式
        if (Number.isInteger(result)) {
            console.log('整数形式：', result);
        } else {
            console.log('小数形式：', result);
            console.log('科学计数法：', result.toExponential());
        }
    } else {
        console.log('计算结果：', result);
    }
    
} catch (error) {
    console.error('错误：', error.message);
    console.log('');
    console.log('请检查表达式是否正确：');
    console.log('  - 确保运算符使用正确');
    console.log('  - 确保括号匹配');
    console.log('  - 确保数字格式正确');
    console.log('  - 确保 Math 函数调用正确');
    console.log('');
    console.log('使用 --help 查看使用说明');
    process.exit(1);
}

console.log('\n=== 计算完成 ===');
